unit PesquisaResumoEstoqueCentroCusto;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UFormPesquisa, DB, DBTables, StdCtrls, Grids, DBGrids, Buttons,
  ExtCtrls, CheckLst, DBCtrls, Mask, ToolEdit;

type
  TFPesquisaResumoEstoqueCentroCusto = class(TFormPesquisa)
    Label9: TLabel;
    DEDataIni: TDateEdit;
    Label6: TLabel;
    DEDataFim: TDateEdit;
    Label16: TLabel;
    DBLCBCentroCusto: TDBLookupComboBox;
    CkBTodasEmpresas: TCheckBox;
    Label10: TLabel;
    CLBEmpresas: TCheckListBox;
    QResumoEstoque: TQuery;
    QAux2: TQuery;
    QAux: TQuery;
    DSCentro: TDataSource;
    SpeedButton3: TSpeedButton;
    EGrupoTipoMovimentoestoque: TEdit;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure CkBTodasEmpresasClick(Sender: TObject);
    procedure BtnConsultarClick(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BtnLimparClick(Sender: TObject);
    procedure BtnImprimirClick(Sender: TObject);
    procedure DBLCBCentroCustoKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
   Procedure MontaPai;
   Procedure MontaEstrutura;
   procedure MontaDados;

  public
    { Public declarations }
  end;

var
  FPesquisaResumoEstoqueCentroCusto: TFPesquisaResumoEstoqueCentroCusto;
  X,Pai :Integer;
  s : String;
  Entrada,Saida :Real;

implementation

uses UGeral, UDmFinanceiro, CapturaCentroCusto,
  RelatorioResumoEstoqueCentroCusto;

{$R *.dfm}

procedure TFPesquisaResumoEstoqueCentroCusto.MontaEstrutura;
begin
 QResumoEstoque.Close;
 QResumoEstoque.Open;
 QPesquisa.First;
 while not(QPesquisa.Eof) do
  begin
   QResumoEstoque.Append;
   QResumoEstoque.FieldByName('ESTRUTURACENTRO').AsString:=QPesquisa.fieldByname('ESTRUTURACENTRO').AsString;
   QResumoEstoque.FieldByName('DESCRICAOCENTRO').AsString:=QPesquisa.fieldByname('DESCRICAOCENTRO').AsString;
   QResumoEstoque.FieldByName('Natureza').AsString:=QPesquisa.fieldByname('ENTRADASAIDA').AsString;
   if QPesquisa.fieldByname('ENTRADASAIDA').AsString = planoContasEntrada then
    begin
     QResumoEstoque.FieldByName('Entrada').AsFloat:=QPesquisa.fieldByname('VALOR').AsFloat;
     QResumoEstoque.FieldByName('Saida').AsFloat:=0.0;
    end
   else
    begin
     QResumoEstoque.FieldByName('Entrada').AsFloat:=0.0;
     QResumoEstoque.FieldByName('Saida').AsFloat:=QPesquisa.fieldByname('VALOR').AsFloat;
    end;
   QResumoEstoque.Post;
   QPesquisa.next;
  end;
end;


procedure TFPesquisaResumoEstoqueCentroCusto.MontaPai;
begin
 QResumoEstoque.close;
 QResumoEstoque.open;
 QAux.close;     //      Busca pais;
 QAux.SQL.Clear;
 QAux.SQL.Add('Select Codigo,Estrutura,Descricao,CodPai as Pai from CentroCusto ');
 QAux.Open;

 QAux2.Close;
 QAux2.SQL.Clear;
 QAux2.SQL:=QResumoEstoque.SQL;
 QAux2.Params:=QResumoEstoque.Params;
 QAux2.open;
 QAux2.First;
 while not( QAux2.eof) do
  begin
   QAux.Locate('Estrutura',QAux2.fieldByname('EstruturaCentro').AsString,[locaseInsensitive]);
   while QAux.fieldByname('Pai').AsInteger <> 0  do
    begin
     if Not (QResumoEstoque.Locate('EstruturaCentro',QAux.FieldByName('Estrutura').AsString,[locaseinsensitive])) then
      begin
       QResumoEstoque.Append;
       QResumoEstoque.FieldByName('ESTRUTURACentro').AsString:=QAux.fieldByname('Estrutura').AsString;
       QResumoEstoque.FieldByName('DESCRICAOCentro').AsString:=QAux.fieldByname('DESCRICAO').AsString;
       QResumoEstoque.FieldByName('Entrada').Asfloat:=0.0;
       QResumoEstoque.FieldByName('Saida').Asfloat:=0.0;
       QResumoEstoque.Post;
       QResumoEstoque.close;
       QResumoEstoque.open;
      end;
     pai:=QAux.fieldByname('Pai').AsInteger;
     QAux.Locate('Codigo',Pai,[locaseInsensitive]);
    end; // While qaux
    QAux2.Next;
  end;
end;


procedure TFPesquisaResumoEstoqueCentroCusto.MontaDados;
Begin
 QResumoEstoque.close;
 QResumoEstoque.open;
 QResumoEstoque.First;
 while Not(QResumoEstoque.Eof) do
 begin
  QAux2.Close;
  QAux2.SQL.Clear;
  qaux2.SQL.Add(' Select sum(Entrada) as Entrada From RESUMOESTOQUECentroCusto  ');
  qaux2.SQL.Add(' Where (estruturaCentro like :Est) and (Natureza = :Nat)');
  qaux2.ParamByName('Est').AsString :=QResumoEstoque.fieldByname('EstruturaCentro').AsString + '%';
  QAux2.ParamByName('Nat').AsString:=PlanoContasEntrada;
  qaux2.Open;
  Entrada:=qaux2.fieldByname('Entrada').AsFloat;

  QAux2.Close;
  QAux2.SQL.Clear;
  qaux2.SQL.Add(' Select sum(Saida) as Saida From RESUMOESTOQUECentroCusto  ');
  qaux2.SQL.Add(' Where (estruturaCentro like :Est) and (Natureza = :Nat)');
  qaux2.ParamByName('Est').AsString :=QResumoEstoque.fieldByname('EstruturaCentro').AsString + '%';
  QAux2.ParamByName('Nat').AsString:=PlanoContasSaida;
  qaux2.Open;
  Saida:=qaux2.fieldByname('Saida').AsFloat;

  // Se for no pai
  if (QResumoEstoque.FieldByName('Natureza').AsString = '') then
   begin
    QResumoEstoque.Edit;
    QResumoEstoque.FieldByName('Entrada').AsFloat:=Entrada;
    QResumoEstoque.FieldByName('Saida').AsFloat:=Saida;
    QResumoEstoque.Post;
   end;
   QResumoEstoque.Next;
 end;
End;



procedure TFPesquisaResumoEstoqueCentroCusto.FormCreate(Sender: TObject);
begin
  inherited;
 QPesquisa.Close;
 QPesquisa.SQL.Clear;
 QPesquisa.SQL.Add('Select Emp_Codigo,Emp_Fantasia from empresa');
 QPesquisa.Open;
 QPesquisa.First;
 CLBEmpresas.Items.Clear;
 while not(QPesquisa.Eof) do
 begin
  CLBEmpresas.Items.Add(QPesquisa.fieldByname('Emp_Codigo').AsString + '-' + QPesquisa.fieldByname('Emp_Fantasia').AsString );
  QPesquisa.Next;
 end;
 CkBTodasEmpresasClick(Sender);
 QPesquisa.Close;

end;

procedure TFPesquisaResumoEstoqueCentroCusto.CkBTodasEmpresasClick(Sender: TObject);
Var
 i :Integer;
begin
  inherited;
 for i := 0 to CLBEmpresas.Items.Count - 1 do
  begin
   if StrToInt(Copy(CLBEmpresas.Items.Strings[i],1,pos('-',CLBEmpresas.Items.Strings[i])- 1)) = Codigoempresa then
    CLBEmpresas.Checked[i]:=true
   else
    CLBEmpresas.Checked[i]:=CkBTodasEmpresas.Checked;
  end;

end;

procedure TFPesquisaResumoEstoqueCentroCusto.BtnConsultarClick(Sender: TObject);
begin
 Self.Cursor:=crHourGlass;
 QResumoEstoque.close;
 QResumoEstoque.RequestLive:=True;
 QResumoEstoque.SQL.Clear;
 QResumoEstoque.SQL.Add('Delete From RESUMOESTOQUECentroCusto');
 QResumoEstoque.ExecSQL;

 QResumoEstoque.Close;
 QResumoEstoque.SQL.Clear;
 QResumoEstoque.SQL.Add('Select * From RESUMOESTOQUECentroCusto');
 QResumoEstoque.SQL.Add('Order by EstruturaCentro');
 QResumoEstoque.open;

 if (EmpresasDesmarcadas(CLBEmpresas) = CLBEmpresas.Items.Count) then
  CkBTodasEmpresasClick(Sender);
 S:=Concatenaempresas(CLBEmpresas);
 Self.Cursor:=crHourGlass;

 QPesquisa.Close;
 QPesquisa.SQL.Clear;
 QPesquisa.SQL.Add('Select CentroCusto.estrutura as estruturaCentro,CentroCusto.Descricao as DescricaoCentro,(ItensMovEst_Quantidade * ItensMovEst_ValorC) as Valor,TIPMOVEST_ENTRADASAIDA as EntradaSaida ');
 QPesquisa.SQL.Add('From CentroCusto inner join(TipoMovimentoEstoque Right join ( MovimentoEstoque inner join ItensMovimentoEstoque on ItensMovEst_MovimentoEstoque = MovEst_Codigo)  on  TipMovEst_Codigo = MovEst_TipoMovimento )  On CentroCusto.Codigo = MOVEST_Centrocusto ');
 QPesquisa.SQL.Add(' Where (MovimentoEstoque.Codigoempresa in ( ' + s + ') )');

 if DBLCBCentroCusto.Text <> '' then
  begin
   QPesquisa.SQL.Add(' and (CentroCusto.Estrutura like :EstC)');
   QPesquisa.ParamByName('EstC').AsString:=DMFinanceiro.QCentro.fieldByname('Estrutura').AsString + '%';
  end;

 if EGrupoTipoMovimentoestoque.Text <> '' then
  begin
   QPesquisa.SQL.Add(' and (TIPMOVEST_GRUPO = :Grup)');
   QPesquisa.ParamByName('Grup').AsString:=EGrupoTipoMovimentoestoque.Text;
  end;

 If (DEDataIni.Date <> 0) and ((DEDataFim.Date <> 0)) then
  begin
   QPesquisa.SQL.Add(' and (MovEst_DataLancamento  between :DataI and :DataF ) ');
   QPesquisa.ParamByName('DataI').AsDate:=DEDataIni.Date;
   QPesquisa.ParamByName('DataF').AsDate:=DEDataFim.Date;
  end;
 QPesquisa.Open;
 DSPesquisa.DataSet:=QPesquisa;
 MontaEstrutura;
 MontaPai;
 MontaDados;

 QResumoEstoque.Close;
 QResumoEstoque.RequestLive:=false;
 QResumoEstoque.SQL.Clear;
 QResumoEstoque.SQL.Add('Select EstruturaCentro,DescricaoCentro,Sum(Entrada) as Entrada, Sum(Saida) as Saida,Sum(Saida - Entrada) as Liquido From RESUMOESTOQUECentroCusto ');
 QResumoEstoque.SQL.Add('Group By EstruturaCentro,DescricaoCentro');
 QResumoEstoque.open;

 Self.Cursor:=crDefault;
 DSPesquisa.DataSet:=QResumoEstoque;
 inherited;
 BtnSelecionar.Enabled:=False;
 
end;

procedure TFPesquisaResumoEstoqueCentroCusto.SpeedButton3Click(
  Sender: TObject);
begin
  inherited;
 if FCapturaCentroCusto = nil then
    Application.CreateForm(TFCapturaCentroCusto, FCapturaCentroCusto);
 FCapturaCentroCusto.Tela:='RESUMOESTOQUECENTRO';
 FCapturaCentroCusto.show;

end;

procedure TFPesquisaResumoEstoqueCentroCusto.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
 FPesquisaResumoEstoqueCentroCusto:=nil;
 inherited;
end;

procedure TFPesquisaResumoEstoqueCentroCusto.BtnLimparClick(
  Sender: TObject);
begin
 inherited;
 DBLCBCentroCusto.KeyValue:=null;
 EGrupoTipoMovimentoestoque.Text:='';
 DEDataIni.Date:=0;
 DEDataFim.Date:=0;
end;

procedure TFPesquisaResumoEstoqueCentroCusto.BtnImprimirClick(
  Sender: TObject);
begin
  inherited;
 Application.CreateForm(TFRelatorioResumoEstoqueCentroCusto,FRelatorioResumoEstoqueCentroCusto);
 with FRelatorioResumoEstoqueCentroCusto do
  begin
   Query1.close;
   Query1.SQL.Clear;
   Query1.SQL:=QResumoEstoque.SQL;
   Query1.Params:=QResumoEstoque.Params;
   Query1.Open;

   q2.Close;
   q2.SQL:=Query1.SQL;
   q2.Params:=Query1.Params;
   q2.Open;

   QRelatorio.Close;
   QRelatorio.SQL.Clear;
   QRelatorio.SQL.Add(' Select * from CentroCusto ');
   QRelatorio.SQL.Add(' Order By Estrutura ');
   QRelatorio.Open;

   QRLNomeRelatorio.Caption:='CONSUMO POR CENTRO DE CUSTO - RESUMO';
   QRLData.Caption:=DEDataIni.Text + ' a ' + DEDataFim.Text;
   QuickRep1.DataSet:=Query1;
   QuickRep1.Prepare;
   QuickRep1.Preview;
   close;
  end; // With


end;

procedure TFPesquisaResumoEstoqueCentroCusto.DBLCBCentroCustoKeyDown(
  Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  inherited;
 case key of
  38,40 : begin
           DMFinanceiro.QCentro.Close;
           DMFinanceiro.QCentro.Open;
          end ;
 end;

 if key = 46 then
  TDBLookupComboBox(Sender).KeyValue:=null;

end;

end.
